home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / casm1.lqr / DISPIO.ASM next >
Assembly Source File  |  1985-06-03  |  4KB  |  120 lines

  1.  
  2. ;                         Listing 3
  3. ;                  C to Assembly Interface
  4. ;   Computer Language, Vol. 2, No. 2 (February, 1985), pp. 49-59
  5.  
  6. ;Interfacing C to access architecture dependent capabilities 
  7.  
  8. TITLE DISPIO - SUBROUTINE TO PERFORM DIRECT SCREEN I/O
  9. ;
  10. ;  #define MAX 8
  11. ;  char retvals [MAX] /* used by 3 functions */
  12. ;           /* (1) - read cursor position; retvals[0-1] = current cursor mode */
  13. ;           /*         retvals[3] = col, retvals[2] = row */
  14. ;           /* (2) - read light pen position  */
  15. ;           /*         retvals[0] = active(1)/inactive(0) */
  16. ;           /*         retvals[2-3] = pixel column, retvals[4]=raster line */
  17. ;           /*         retvals[6] = row, retvals[7] = col */
  18. ;           /* (3) - get state; retvals[0] = cols, retvals[1] = mode */
  19. ;           /*         retvals[2] = page */ 
  20. ;
  21. ;   setmode - dispio(mode) ;
  22. ;   set cursor type - dispio(set_curs_type,type) ;
  23. ;   set cursor position - dispio(set_cursor,page<<8,row<<8+col) ;
  24. ;   read cursor position - dispio(read_cursor_position,page<<8,retvals) ;
  25. ;   read light pen position - dispio(read_pen,retvals) ;
  26. ;   select active page - dispio(select_page+new_page_value) ;
  27. ;   scroll active page up - dispio(scroll_up+number_of_lines,page<<8,
  28. ;                                  lrow<<8+lcol, rrow<<8+rcol) ;
  29. ;   scroll active page down - dispio(scroll_down+number_of_lines,page<<8,
  30. ;                                    lrow<<8+lcol,rrow<<8+rcol) ;
  31. ;   get attribute character at current cursor pos - dispio(readac,page<<8) ;
  32. ;     returns attribute character as function value - high byte attribute,
  33. ;     low byte character
  34. ;   write attribute character at current cursor position - dispio(writeac+char,
  35. ;            page<<8+attribute, repeat count)
  36. ;   write character - dispio(write_char+character,page<<8,repeat count) ;
  37. ;   set color palette - dispio(set_pallette,pallette<<8+color_value) ;
  38. ;   write dot - dispio(write_dot+color,col,row) ;
  39. ;   read dot - dispio(read_dot,col,row)
  40. ;              dot read returned as low byte of function value
  41. ;   write teletype - dispio(write_teletype+char,(page<<8)+color) ;
  42. ;   get state - dispio(get_state,retval) 
  43. ;
  44. DGROUP  GROUP  DATA
  45. DATA    SEGMENT WORD PUBLIC 'DATA'
  46.         ASSUME  DS:DGROUP
  47. CASE_TABLE DW SETMODE,CURSTYPE,SETCURS,READCURS,READPEN,SETMODE
  48.            DW SCROLL,SCROLL,READAC,WRITEAC,WRITEAC,READAC,WRITEDOT
  49.            DW WRITEDOT,READAC,STATE
  50. ; case table uses 16 words
  51. RLAYOUT  STRUC        ; Return address space layout
  52. RAX     DW    ?       
  53. RBX     DW    ?
  54. RCX     DW    ?
  55. RDX     DW    ?
  56. RLAYOUT ENDS
  57. DATA    ENDS
  58. ;
  59. PGROUP  GROUP  PROG
  60. PROG    SEGMENT  BYTE  PUBLIC 'PROG'
  61.         ASSUME   CS:PGROUP
  62.         PUBLIC   DISPIO
  63. ;
  64. DISPIO  PROC    NEAR
  65.         POP     SI
  66.         POP     AX
  67.         MOV     BL,AH
  68.         XOR     BH,BH
  69.         CMP     BL,15             ; INVALID FUNCTION CODE ?
  70.         JA      ERROR
  71.         SHL     BX,1
  72.         JMP     CASE_TABLE[BX]
  73. ;
  74. ERROR:  MOV     AX,-1
  75.         JMP     SI
  76. ;
  77. SETCURS:   POP    BX
  78.            POP    DX
  79. SETMODE:   INT    10H
  80.            JMP    SI
  81. ;
  82. READCURS:  POP    BX
  83.            INT    10H
  84.            POP    DI
  85.            MOV    [DI].RAX,CX
  86.            MOV    [DI].RBX,DX
  87.            JMP    SI
  88. ;
  89. SCROLL:    POP    BX
  90. WRITEDOT:  POP    CX
  91.            POP    DX
  92.            INT    10H
  93.            JMP    SI
  94. ;
  95. READAC:    POP    BX
  96.            INT    10H
  97.            JMP    SI
  98. ;
  99. WRITEAC:   POP    BX
  100. CURSTYPE:  POP    CX
  101.            INT    10H
  102.            JMP    SI
  103. ;
  104. STATE:     INT    10H
  105.            POP    DI
  106.            MOV    [DI].RAX,AX
  107.            MOV    [DI].RBX,BX
  108.            JMP    SI
  109. ;
  110. READPEN:   INT    10H
  111.            POP    DI
  112.            MOV    [DI].RAX,AX
  113.            MOV    [DI].RBX,BX
  114.            MOV    [DI].RCX,CX
  115.            MOV    [DI].RDX,DX
  116.            JMP    SI
  117. DISPIO  ENDP
  118. PROG    ENDS
  119.         END
  120.